/* 
泛型类
*/
 /* 
  1. 声明泛型类型: 在类名的右侧  <T>   // T K V
  2. 使用泛型: 类体中
  3. 指定泛型的具体类型: 创建类的实例时, 类名的右侧 <具体类型>
  */

(() => {
  class GenericData<T> {
    initValue: T // 不能指定初始值
    sum: (a: T, b: T) => T // 不用写实现
  }

  // 泛型类创建实例后, 需要指定属性值, 方法的实现
  const numberData = new GenericData<number>()
  numberData.initValue = 3
  numberData.sum = function (x, y) {
    return  x + y
  }
  console.log(numberData.sum(numberData.initValue, 5))

  const stringData = new GenericData<string>()
  stringData.initValue = 'abc'
  stringData.sum = function (x, y) {
    return x + y
  }
  console.log(stringData.sum(stringData.initValue, 'cba'))


  
})()